home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / TankAction / TankAction.AMOS / TankAction.amosSourceCode < prev   
Encoding:
AMOS Source Code  |  1994-01-16  |  5.7 KB  |  232 lines

  1. Dim PL(3,8),SH(39,4),WL(29,4),F(21,25)
  2. Gosub INIT
  3. LE=3
  4. Gosub LADEN
  5. PL=3
  6. Hide 
  7. Do 
  8.   Screen 0
  9.   For P=0 To PL
  10.     If Spritebob Col(P*2)
  11.       For A=0 To PL*10+9
  12.         If(A>P*10+9 or A<P*10) and Col(A)
  13.           Boom : SH(A,0)=0
  14.           PL(P,7)=Max(PL(P,7)-10,0)
  15.         End If 
  16.       Next 
  17.     End If 
  18.   Next 
  19.   For P=0 To PL
  20.     If PL(P,7)>0 Then Gosub COMPUTE Else Gosub EXLODE
  21.     Gosub SHOTCONTROL
  22.   Next 
  23.   Bob Draw 
  24.   Screen 1
  25. '  For P=0 To PL 
  26. '    Locate 20*(P/2),P mod 2 
  27. '    A$=Str$(PL(P,7))-" "
  28. '    Print "ENERGY ";String$("0",2-Len(A$));A$;
  29. '    A$=Str$(PL(P,8))-" "
  30. '    Print "% GUN ";String$("0",2-Len(A$));A$;"%  "; 
  31. '  Next  
  32.   FL=1-FL
  33.   If WL Then Gosub ANI
  34.   If SX Then Gosub BONUSANI
  35.   If Rnd(20)=0 and SX=0 Then Gosub SETBONUS
  36.   Screen Swap 0 : Wait Vbl : Bob Clear 
  37. Loop 
  38. End 
  39. EXLODE:
  40.   If PL(P,3)=32 Then Sprite Off P*2 : Return 
  41.   If PL(P,3)<7 Then PL(P,3)=8
  42.   Sprite P*2,PL(P,0)+128,PL(P,1)+40,PL(P,3)-7
  43.   Inc PL(P,3)
  44. Return 
  45. COMPUTE:
  46.   If PL(P,2)=0 Then RX=Jleft(1)-Jright(1) : RY=Jup(1)-Jdown(1) : FI=Fire(1)
  47.   I=PL(P,3)
  48.   Gosub DI
  49.   Gosub COMV
  50.   PL(P,3)=I : X=PL(P,0)+RX*2 : Y=PL(P,1)+RY*2
  51.   Screen 2
  52.   If Point(X+3,Y+7+RY*4)=1 Then RY=0
  53.   If Point(X+11,Y+7+RY*4)=1 Then RY=0
  54.   If Point(X+7+RX*4,Y+3)=1 Then RX=0
  55.   If Point(X+7+RX*4,Y+11)=1 Then RX=0
  56.   If F=7 and RX=0 Then PL(P,4)=-PL(P,4)
  57.   If F=7 and RY=0 Then PL(P,5)=-PL(P,5)
  58.   If F=10 and FL Then PL(P,7)=Min(PL(P,7)+1,99)
  59.   If PL(P,6) Then Dec PL(P,6) Else If FI and F<>9 Then Gosub SHOT
  60.   Add PL(P,0),RX*2 : Add PL(P,1),RY*2
  61.   If FL Then PL(P,8)=Min(PL(P,8)+1,99)
  62.   Sprite P*2,PL(P,0)+128,PL(P,1)+40,25+I+P*16+FL*8
  63.   X=(PL(P,0)+7)/16 : Y=(PL(P,1)+7)/16
  64.   If SA=30 and X=SX and Y=SY Then SA=31
  65.   For A=0 To WL-1
  66.     If WL(A,0)=X and WL(A,1)=Y Then Inc WL(A,4)
  67.   Next 
  68. Return 
  69. DI:
  70.   F=F((PL(P,0)+23)/16,(PL(P,1)+23)/16)
  71.   If F=1 Then RY=-1 : Return 
  72.   If F=2 Then RY=1 : Return 
  73.   If F=3 Then RX=1 : Return 
  74.   If F=4 Then RX=-1 : Return 
  75.   If F=5 Then RY=PL(P,5) : Return 
  76.   If F=6 Then RX=PL(P,4) : Return 
  77.   If F=7 Then RX=PL(P,4) : RY=PL(P,5)
  78. Return 
  79. COMV:
  80.   If RX<>0 or RY<>0 Then PL(P,4)=RX : PL(P,5)=RY
  81.   If RX=0 and RY=-1 Then I=0 : Return 
  82.   If RX=1 and RY=-1 Then I=1 : Return 
  83.   If RX=1 and RY=0 Then I=2 : Return 
  84.   If RX=1 and RY=1 Then I=3 : Return 
  85.   If RX=0 and RY=1 Then I=4 : Return 
  86.   If RX=-1 and RY=1 Then I=5 : Return 
  87.   If RX=-1 and RY=0 Then I=6 : Return 
  88.   If RX=-1 and RY=-1 Then I=7
  89. Return 
  90. SHOTCONTROL:
  91.   For A=P*10 To P*10+9
  92.     If SH(A,0)
  93.       For B=0 To 3
  94.         RX=SH(A,2) : RY=SH(A,3)
  95.         Add SH(A,0),RX : Add SH(A,1),RY
  96.         X=SH(A,0) : Y=SH(A,1)
  97.         If Point(X,Y)>0 : Gosub BOUNCH : End If 
  98.       Next 
  99.       If SH(A,4)=0 : SH(A,0)=0 : Else Dec SH(A,4) : End If 
  100.     End If 
  101.   Next 
  102.   Screen 0
  103.   For A=P*10 To P*10+9
  104.     If SH(A,0)
  105.       Bob A,SH(A,0)-2,SH(A,1)-2,90+P
  106.     Else 
  107.       Bob Off A
  108.     End If 
  109.   Next 
  110. Return 
  111. SETBONUS:
  112.   SX=Rnd(19) : SY=Rnd(15)
  113.   If F(SX+1,SY+1)>0 Then SX=0 : Return 
  114.   SA=18
  115. Return 
  116. BONUSANI:
  117.   If SA=38 Then SA=0
  118.   Screen 1
  119.   Put Block SA+1,SX*16,SY*16
  120.   If SA=30 Then Return 
  121.   If SA=0 Then SX=0 : Return 
  122.   Inc SA
  123. Return 
  124. BOUNCH:
  125.   SH(A,4)=Max(SH(A,4)-5,0)
  126.   If Point(X-1,Y-1)>0 and Point(X+1,Y+1)>0 Then SH(A,2)=RY : SH(A,3)=RX : Return 
  127.   If Point(X+1,Y-1)>0 and Point(X-1,Y+1)>0 Then SH(A,2)=-RY : SH(A,3)=-RX : Return 
  128.   If Point(X-1,Y)>0 and Point(X+1,Y)>0 Then SH(A,3)=-RY : Return 
  129.   If Point(X,Y-1)>0 and Point(X,Y-1)>0 Then SH(A,2)=-RX : Return 
  130.   SH(A,2)=-RX : SH(A,3)=-RY
  131. Return 
  132. SHOT:
  133.   If PL(P,8)<10 Then Return 
  134.   For A=P*10 To P*10+9
  135.     If SH(A,0)=0
  136.       PL(P,6)=5 : Shoot 
  137.       Add PL(P,8),-10
  138.       SH(A,0)=X+7 : SH(A,1)=Y+7
  139.       SH(A,2)=PL(P,4) : SH(A,3)=PL(P,5)
  140.       SH(A,4)=200 : Exit 
  141.     End If 
  142.   Next 
  143. Return 
  144. ANI:
  145.   For A=0 To WL-1
  146.     WL(A,4)=Max(WL(A,4)-1,0)
  147.     If WL(A,4)=0
  148.       F=WL(A,2)
  149.       Add F,WL(A,3)
  150.       WL(A,4)=1
  151.       If F=18 or F=10
  152.         F=WL(A,2) : WL(A,3)=-WL(A,3) : WL(A,4)=40
  153.       End If 
  154.       WL(A,2)=-F
  155.       Put Block F+1,WL(A,0)*16,WL(A,1)*16
  156.     End If 
  157.   Next 
  158.   Screen 2
  159.   For A=0 To WL-1
  160.     If WL(A,2)<0
  161.       Put Block 100-WL(A,2),WL(A,0)*16,WL(A,1)*16
  162.       WL(A,2)=-WL(A,2)
  163.     End If 
  164.   Next 
  165. Return 
  166. LADEN:
  167.   If Exist("Dh2:AMOS/Projekte/TankAction/TankLevels/"+Str$(LE)-" ")=0 Then Boom : Return 
  168.   Erase 10 : Reserve As Data 10,328
  169.   Bload "Dh2:AMOS/Projekte/TankAction/TankLevels/"+Str$(LE)-" ",Start(10)
  170.   ST=Start(10)
  171.   For A=0 To 3
  172.     PL(A,0)=Peek(ST+A*2)*16
  173.     PL(A,1)=Peek(ST+A*2+1)*16
  174.     PL(A,7)=99
  175.     PL(A,8)=99
  176.   Next 
  177.   Screen 1
  178.   WL=0
  179.   For Y=0 To 15
  180.     For X=0 To 19
  181.       F=Peek(ST+Y*20+X+8)
  182.       F(X+1,Y+1)=F
  183.       If F>10 and F<18 Then WL(WL,0)=X : WL(WL,1)=Y : WL(WL,2)=F : WL(WL,3)=1 : Inc WL
  184.       Put Block 1+F,X*16,Y*16
  185.     Next 
  186.   Next 
  187.   Screen 2
  188.   For Y=0 To 15
  189.     For X=0 To 19
  190.       Put Block F(X+1,Y+1)+100,X*16,Y*16
  191.     Next 
  192.   Next 
  193. Return 
  194. INIT:
  195.   Screen Open 0,320,256,8,0 : Screen Hide 0
  196.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  197.   Make Mask 
  198.   Screen Display 0,128,40,,
  199.   For Y=0 To 9
  200.     For X=0 To 9
  201.       Paste Bob X*32,Y*32,89
  202.     Next 
  203.   Next 
  204.   Wait Vbl 
  205.   Double Buffer 
  206.   Autoback 0
  207.   Bob Update Off 
  208.   Unpack 8 To 2 : Screen Hide 2
  209.   For A=0 To 79
  210.     Get Block A+100,(A mod 20)*16,(A/20)*16,16,16
  211.   Next 
  212.   Screen Open 2,320,256,4,0 : Screen Hide 2
  213.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  214.   Unpack 9 To 1 : Screen Hide 1
  215.   For A=0 To 79
  216.     Get Block A+1,(A mod 20)*16,(A/20)*16,16,16
  217.   Next 
  218.   Screen 0 : Get Palette 1
  219.   Get Sprite Palette 
  220.   For A=0 To 15 : Colour A+16,Colour(A) : Next 
  221.   For A=0 To 7 : Colour A+8,Colour(A) : Next 
  222.   Palette 0,$888,$666,$444,$F0,$F00,$FF0,$444
  223.   Screen Open 1,320,256,8,0
  224.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  225.   Screen Display 1,128,40,,
  226.   For A=0 To 31 : Colour A,0 : Next 
  227.   Fade 4 To 0
  228.   Screen 0
  229.   Screen Show 0
  230.   Dual Playfield 0,1
  231.   Dual Priority 1,0
  232. Return